package cerebrum.common;

import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.nio.charset.StandardCharsets;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

public interface PathUtils {

    public static String readJarFile(String relativePath) {
        String jarPath = getJarPath();
        File file = new File(jarPath);
        try (JarFile jarFile = new JarFile(file);) {// 通过jar包的路径 创建 jar包实例
            JarEntry entry = jarFile
                    .getJarEntry(relativePath);// 通过某个文件在jar包中的位置来获取这个文件
            InputStream input = jarFile.getInputStream(entry); // 创建该文件输入流
            try (Reader reader = new InputStreamReader(input, StandardCharsets.UTF_8);) {
                int ch = 0;
                StringBuilder sb = new StringBuilder();
                while ((ch = reader.read()) != -1) {
                    sb.append((char) ch);
                }
                return sb.toString();
            }

        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 获取开发时文件路径
     *
     * @param relativePath 开发时文件的目录
     * @return 具体的文件路径 {@link String}
     */
    public static String getFileInfoFromLocal(String relativePath) {
        return PathUtils.class.getResource("/" + relativePath).getPath();
    }

    /**
     * 如果不是 jar包，会获取到 /target/classes 目录
     * 因此可以通过此判断是否是 jar 还是开发
     *
     * @return
     */
    public static String getJarPath() {
        return PathUtils.class.getProtectionDomain().getCodeSource().getLocation().getPath();
    }

    /**
     * 判断是不是从 Jar 包读取的情况
     * 如果是，则该路径下的不是文件夹
     *
     * @return
     */
    public static boolean isJar() {
        return !(new File(getJarPath()).isDirectory());
    }
}

